//! Zoi集成示例
//! 展示如何使用Kuya项目中集成的Zoi服务进行包管理操作

use std::sync::Arc;
use std::sync::Mutex;
use kuya_safe_services::{ServiceManager, ZoiServiceImpl};
use log::{info, error};
use tokio::runtime::Runtime;

/// Zoi集成示例函数
fn main() {
    // 初始化日志系统
    env_logger::init();
    
    info!("=== Kuya Zoi集成示例 ===");
    
    // 创建Tokio运行时
    let rt = Runtime::new().expect("Failed to create Tokio runtime");
    
    // 创建并启动服务管理器
    let service_manager = match ServiceManager::new() {
        Ok(manager) => {
            info!("服务管理器创建成功");
            manager
        },
        Err(err) => {
            error!("服务管理器创建失败: {}", err);
            return;
        }
    };
    
    // 启动所有服务
    if let Err(err) = service_manager.start_all_services() {
        error!("启动服务失败: {}", err);
        return;
    }
    
    // 获取Zoi服务
    let zoi_service = service_manager.get_zoi_service();
    
    // 使用Zoi服务执行包管理操作
    rt.block_on(async {
        // 1. 同步包数据库
        info!("\n1. 同步包数据库...");
        if let Err(err) = zoi_service.lock().unwrap().sync_packages().await {
            error!("同步包数据库失败: {}", err);
        } else {
            info!("包数据库同步成功");
        }
        
        // 2. 获取已安装的包列表
        info!("\n2. 获取已安装的包列表...");
        match zoi_service.lock().unwrap().get_installed_packages().await {
            Ok(packages) => {
                if packages.is_empty() {
                    info!("暂无已安装的包");
                } else {
                    info!("已安装的包 ({}个):", packages.len());
                    for pkg in packages {
                        info!("- {}@{} ({})", 
                              pkg.name, 
                              pkg.version.unwrap_or_else(|| "unknown".to_string()),
                              pkg.description.unwrap_or_else(|| "无描述".to_string()));
                    }
                }
            },
            Err(err) => {
                error!("获取已安装的包列表失败: {}", err);
            }
        }
        
        // 3. 检查特定包是否已安装（这里以一个示例包名为例）
        info!("\n3. 检查示例包是否已安装...");
        let example_package = "hello";
        match zoi_service.lock().unwrap().is_package_installed(example_package).await {
            Ok(is_installed) => {
                if is_installed {
                    info!("包 '{}' 已安装", example_package);
                } else {
                    info!("包 '{}' 未安装", example_package);
                    // 如果未安装，提供安装建议
                    info!("提示: 可以使用以下代码安装该包:");
                    info!(r#"// zoi_service.lock().unwrap().install_package("hello", false).await"#);
                }
            },
            Err(err) => {
                error!("检查包 '{}' 是否已安装失败: {}", example_package, err);
            }
        }
        
        // 4. 自动移除不再需要的依赖包
        info!("\n4. 自动移除不再需要的依赖包...");
        if let Err(err) = zoi_service.lock().unwrap().autoremove_packages().await {
            error!("自动移除依赖包失败: {}", err);
        } else {
            info!("自动移除依赖包完成");
        }
        
        // 5. 提示用户如何使用Zoi CLI
        info!("\n=== Zoi CLI使用提示 ===");
        info!("除了通过API使用Zoi功能外，您还可以在项目根目录下使用Zoi CLI:");
        info!("\n项目相关命令:");
        info!("  zoi run build           - 构建整个项目");
        info!("  zoi run build-release   - 构建发布版本");
        info!("  zoi run test            - 运行测试");
        info!("  zoi run lint            - 运行代码检查");
        info!("  zoi run fmt             - 格式化代码");
        info!("  zoi run clean           - 清理构建文件");
        info!("\n组件构建命令:");
        info!("  zoi run build-exokernel - 构建exokernel组件");
        info!("  zoi run build-ui        - 构建UI组件");
        info!("  zoi run run-services    - 运行服务管理器");
        info!("  zoi run run-example     - 运行示例代码");
        info!("\n环境命令:");
        info!("  zoi run full-build      - 执行完整构建环境");
        info!("  zoi run fast-dev        - 快速开发环境");
        info!("  zoi run cleanup         - 清理项目环境");
        info!("\n更多Zoi功能，请参考Zoi文档。");
    });
    
    info!("\n=== Zoi集成示例完成 ===");
}